package com.baidu.ueditor.define;

import com.baidu.ueditor.Encoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class MultiState
  implements State
{
  private boolean state = false;
  private String info = null;
  private Map<String, Long> intMap = new HashMap();
  private Map<String, String> infoMap = new HashMap();
  private List<String> stateList = new ArrayList();
  
  public MultiState(boolean state)
  {
    this.state = state;
  }
  
  public MultiState(boolean state, String info)
  {
    this.state = state;
    this.info = info;
  }
  
  public MultiState(boolean state, int infoKey)
  {
    this.state = state;
    this.info = AppInfo.getStateInfo(infoKey);
  }
  
  public boolean isSuccess()
  {
    return this.state;
  }
  
  public void addState(State state)
  {
    this.stateList.add(state.toJSONString());
  }
  
  public void putInfo(String name, String val)
  {
    this.infoMap.put(name, val);
  }
  
  public String toJSONString()
  {
    String stateVal = isSuccess() ? AppInfo.getStateInfo(0) : this.info;
    
    StringBuilder builder = new StringBuilder();
    
    builder.append("{\"state\": \"" + stateVal + "\"");
    
    Iterator<String> iterator = this.intMap.keySet().iterator();
    while (iterator.hasNext())
    {
      stateVal = (String)iterator.next();
      
      builder.append(",\"" + stateVal + "\": " + this.intMap.get(stateVal));
    }
    iterator = this.infoMap.keySet().iterator();
    while (iterator.hasNext())
    {
      stateVal = (String)iterator.next();
      
      builder.append(",\"" + stateVal + "\": \"" + (String)this.infoMap.get(stateVal) + "\"");
    }
    builder.append(", list: [");
    
    iterator = this.stateList.iterator();
    while (iterator.hasNext()) {
      builder.append((String)iterator.next() + ",");
    }
    if (this.stateList.size() > 0) {
      builder.deleteCharAt(builder.length() - 1);
    }
    builder.append(" ]}");
    
    return Encoder.toUnicode(builder.toString());
  }
  
  public void putInfo(String name, long val)
  {
    this.intMap.put(name, Long.valueOf(val));
  }
}
